﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Innvoice.Logica.GestorDB;
using Innvoice.Logica.GestorObject.Articulo;
using Innvoice.Ws.Clientes.Reportes;

namespace Innvoice.Ws.Articulos.SubArticulos
{
    /// <summary>
    /// Lógica de interacción para MostrarSubArticulos.xaml
    /// </summary>
    public partial class MostrarSubArticulos : Window
    {
        List<SubArticulo> subArticulosActivos = new List<SubArticulo>();
        List<SubArticulo> subArticulosDesactivados = new List<SubArticulo>();
        ArticuloDB articuloDB = new ArticuloDB();

        public MostrarSubArticulos()
        {
            InitializeComponent();
        }

        #region Windows Methods

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            subArticulosActivos = articuloDB.ObtenerSubArticulosSegunEstado(1);
            subArticulosDesactivados = articuloDB.ObtenerSubArticulosSegunEstado(0);

            subArticuloDataGridActivos.Items.Clear();
            subArticuloDataGridActivos.ItemsSource = subArticulosActivos;

            subArticuloDataGridDesactivados.Items.Clear();
            subArticuloDataGridDesactivados.ItemsSource = subArticulosDesactivados;
        }

        private void btnAgregarSubArticulo_Click(object sender, RoutedEventArgs e)
        {
            AgregarElemento();
        }

        private void btnDesactivar_Click(object sender, RoutedEventArgs e)
        {
            DesactivarElemento();
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key.ToString().ToUpper())
            {
                case "F1":
                    AgregarElemento();
                    break;
                case "F2":
                    ModificarElemento();
                    break;
                case "F3":
                    DesactivarElemento();
                    break;
                case "F4":
                    Listar();
                    break;
                case "ESCAPE":
                    this.Close();
                    break;
                case "F12":
                    this.Close();
                    break;
                default:
                    return;
            }
        }

        
        private void btnCerarVentana_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnModificarSubArticulo_Click(object sender, RoutedEventArgs e)
        {
            ModificarElemento();
        }

        #endregion

        #region Auxiliar Methods

        private void AgregarElemento()
        {
            AltaSubArticulo altaSubArticulo = new AltaSubArticulo();
            altaSubArticulo.Show();
        }

        //Modificar el elemento seleccionado
        private void ModificarElemento()
        {
            if (subArticuloDataGridActivos.SelectedItems.Count == 1)
            {
                SubArticulo auxSubArticulo = (SubArticulo)subArticuloDataGridActivos.SelectedItem;
                SubArticulo subArticulo = articuloDB.ObtenerSubArticulo(auxSubArticulo.Codigo);
                ModificarSubArticulo modificarSubArticulo = new ModificarSubArticulo(subArticulo);
                modificarSubArticulo.Show();
            }
            else if (subArticuloDataGridActivos.SelectedItems.Count < 1)
            {
                MessageBox.Show("Seleccione el elemento a modificar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Debe seleccionar SOLO UN Sub Articulo a modificar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        //Borra el elemento seleccionado
        private void DesactivarElemento()
        {
            if (subArticuloDataGridActivos.SelectedItems.Count == 1)
            {
                SubArticulo auxSubArticulo = (SubArticulo)subArticuloDataGridActivos.SelectedItem;
                SubArticulo subArticulo = articuloDB.ObtenerSubArticulo(auxSubArticulo.Codigo);
                MessageBoxResult resultado = MessageBox.Show("Realmente desea desactivar el Sub Articulo " + subArticulo.Descripcion + " ?", "Desactivar SubArticulo", MessageBoxButton.YesNoCancel, MessageBoxImage.Exclamation);

                switch (resultado.ToString())
                {
                    case "Yes":
                        articuloDB.DesactivarSubArticulo(subArticulo);
                        break;
                    default:
                        return;
                }
            }
            else if (subArticuloDataGridActivos.SelectedItems.Count < 1)
            {
                MessageBox.Show("Seleccione el elemento a desactivar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Debe seleccionar SOLO UN Sub Articulo a desactivar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void Listar()
        {
            string miRdlc = "Innvoice.Ws.Articulos.Reportes.RptSubArticulo.rdlc";
            string miNameDataSet = "DataSetSubArticulo";
            List<SubArticulo> listaSubArticulo = articuloDB.ObtenerSubArticulosConDescripcion(-1);
            FReporte rp = new FReporte(listaSubArticulo, miRdlc, miNameDataSet);
            rp.Show();
        }

        #endregion

        
    }
}
